Download course materials from here.

bit.ly/———–

Basic ggplot2

# https://bookdown.org/ndphillips/YaRrr/pirateplot.html
library(tidyverse)
install.packages("ggbeeswarm")
library(ggbeeswarm)

Exploration

Plot boxplots and violin plots for the ratings. Subset by participant.

data %>%
  filter(region == 1) %>%
  ggplot(aes(x=gram, y=rating, fill=freq)) +
  geom_boxplot(position = position_dodge(.9)) +
  #geom_violin(alpha=.5) +
  facet_wrap(~subj)

Group by region, word, frequency, and grammaticality. Summarise mean and standard error.

data %>%
  group_by(region, word, freq, gram) %>%
  summarise(meanRT = mean(rt),
            seRT = sd(rt)/sqrt(n())) %>%
  ggplot(aes(x=region,y=meanRT,colour=gram)) +
    geom_point() +
    geom_path(aes(lty=freq)) +
    geom_errorbar(aes(ymin=meanRT-seRT, ymax=meanRT+seRT),width=.1) +
  scale_x_continuous(breaks=c(1:5),labels = c("the","old","VERB","the","boat")) +
  ylab("reading time (miliseconds)")

Why?

Well, check out the Datasaurus Dozen, which all have the same x/y means and standard deviations:

Try it out

Dataset iris:

The function ggplot layers different geometries and aesthetics to build up a plot:

iris %>%
  mutate(Sepal.Width = Sepal.Width+rnorm(length(Sepal.Width),0,.1))%>%
  ggplot(aes(x=Species,y=Sepal.Width,fill=Species)) +
  geom_violin(lty=0,alpha=.5)+
  geom_boxplot(alpha=0.5,lwd=.5) +
  geom_quasirandom(dodge.width=1, alpha=.5)

In what ways might we change this plot?

iris %>%
  mutate(
    Sepal.Width = Sepal.Width + 
      rnorm(
        length(Sepal.Width) , 0 , .1
        )
    ) %>%
  ggplot(aes(x=Species,y=Sepal.Width)) +
  geom_boxplot() +
  geom_quasirandom(aes(pch=Species), alpha=.5)
  #ggplot(aes(x=Species,y=Sepal.Width,fill=Species)) +
  #geom_violin(lty=0,alpha=.5)+
  #geom_boxplot(alpha=0.5,lwd=.5) +
  #geom_quasirandom(dodge.width=1, alpha=.5)

Going back to quakes, let’s pipe our table into a ggplot (and fill in missing values):

quakes %>%
  group_by(mag) %>%
  summarise(n=n(),
            sta=mean(stations),
            staSD=sd(stations),
            staSE=staSD/sqrt(n),
            dep=mean(depth),
            depSD=sd(depth),
            depSE=depSD/sqrt(n)) %>%
  ggplot(aes(x=mag)) +
  geom_point(aes(y=sta),colour="red")+
  geom_path(aes(y=sta),colour="red")+
  geom_ribbon(aes(ymin=sta-staSD,ymax=sta+staSD),fill="red",alpha=.2) +
  geom_ribbon(aes(ymin=sta-staSE,ymax=sta+staSE),fill="red",alpha=.5) +
  geom_point(aes(y=dep),colour="blue")+
  geom_path(aes(y=dep),colour="blue")+
  geom_ribbon(aes(ymin=dep-depSD,ymax=dep+depSD),fill="blue",alpha=.2) +
  geom_ribbon(aes(ymin=dep-depSE,ymax=dep+depSE),fill="blue",alpha=.5) +
  theme_bw() + ylab("depth OR number of stations reporting")

Inheritance:

ggplot(data=quakes, aes(x=long)) +
  geom_point(aes(y=lat,colour=stations)) #+
  #geom_path()
LS0tCnRpdGxlOiAiKipXb3Jrc2hvcCoqIgphdXRob3I6ICJEciBMYXVyZW4gTSBBY2tlcm1hbiIKZGF0ZTogIjA1IEpVTiAyMDE5IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogZmFsc2UKICAgIHRoZW1lOiB5ZXRpCiAgICBoaWdobGlnaHQ6IGRlZmF1bHQKICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UKLS0tCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCgoKIyAxLiBSIGFuZCBSU3R1ZGlvIGludGVyZmFjZXMsIFJNYXJrZG93biwgYW5kIGJlc3QgcHJhY3RpY2VzCiMgICAgLSBCYXNpYyBmdW5jdGlvbmFsaXR5LCBzaG9ydGN1dHMsIHdyaXRpbmcgc2NyaXB0cyBhbmQgbm90ZWJvb2tzLCBvcmdhbmlzaW5nIGZpbGVzLCBpbnRlcmZhY2luZyB3aXRoIEdpdEh1YgojIDIuIERhdGEgZnJhbWUgbWFuaXB1bGF0aW9uIHVzaW5nIFRpZHl2ZXJzZQojICAgIC0gUGlwaW5nIHN5bnRheCBhbmQgY29kZSByZXBsaWNhYmlsaXR5CiMgICAgLSBUaWR5ciwgRHBseXIsIHJlbGF0ZWQgcGFja2FnZXMKIyAgICAtIENsZWFuaW5nLCBjb21iaW5pbmcsIGFuZCByZWFycmFuZ2luZyBkYXRhIGZyYW1lcwojIDMuIERhdGEgdmlzdWFsaXNhdGlvbiB1c2luZyBnZ3Bsb3QgYW5kIGJlc3QgcHJhY3RpY2VzCiMgICAgLSBTdHJ1Y3R1cmUgYW5kIHN5bnRheCBvZiBnZ3Bsb3QgYW5kIGdlb20KIyAgICAtIEN1c3RvbWlzaW5nIGFuZCBjb21iaW5pbmcgcGxvdHMKIyAgICAtIERldGVybWluaW5nIHdoYXQgcGxvdCBpcyBiZXN0IGZvciB5b3VyIGRhdGEKIyA0LiBCYXNpYyBsaW5lYXIgbW9kZWxzIHdpdGhvdXQgYW5kIHdpdGggbWl4ZWQgZWZmZWN0cyAoaW5jbHVkaW5nIGdhdXNzaWFuLCBiaW5vbWlhbCwgYW5kIG9yZGluYWwpCiMgICAgLSBidWlsZGluZy9zZWxlY3RpbmcgYW4gYXBwcm9wcmlhdGUgbW9kZWwsIGluY2x1ZGluZyByYW5kb20gZWZmZWN0IHN0cnVjdHVyZXMKIyAgICAtIG1heGltYWwgdnMgcGFyc2ltb25pb3VzIG1vZGVscwojICAgIC0gcHJhY3RpY2FsIHVzZSBvZiBsbSgpLCBsbWVyKCksIGdsbSgpLCBnbG1lcigpLCBjbG1tKCkKIyAgICAtIGR1bW15IGNvZGluZyB2cyBjb250cmFzdCBjb2RpbmcKIyAgICAtIGludGVycHJldGluZyB0aGUgb3V0cHV0CmBgYAoKRG93bmxvYWQgY291cnNlIG1hdGVyaWFscyBmcm9tIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vVmVyYmluZ05vdW5zLy4uLikuCgogYml0Lmx5Ly0tLS0tLS0tLS0tCiAKIyMgQmFzaWMgZ2dwbG90MiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKYGBge3J9CiMgaHR0cHM6Ly9ib29rZG93bi5vcmcvbmRwaGlsbGlwcy9ZYVJyci9waXJhdGVwbG90Lmh0bWwKbGlicmFyeSh0aWR5dmVyc2UpCmluc3RhbGwucGFja2FnZXMoImdnYmVlc3dhcm0iKQpsaWJyYXJ5KGdnYmVlc3dhcm0pCmBgYAoKIyMjIEV4cGxvcmF0aW9uCgpQbG90IGJveHBsb3RzIGFuZCB2aW9saW4gcGxvdHMgZm9yIHRoZSByYXRpbmdzLiBTdWJzZXQgYnkgcGFydGljaXBhbnQuCmBgYHtyfQpkYXRhICU+JQogIGZpbHRlcihyZWdpb24gPT0gMSkgJT4lCiAgZ2dwbG90KGFlcyh4PWdyYW0sIHk9cmF0aW5nLCBmaWxsPWZyZXEpKSArCiAgZ2VvbV9ib3hwbG90KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoLjkpKSArCiAgI2dlb21fdmlvbGluKGFscGhhPS41KSArCiAgZmFjZXRfd3JhcCh+c3ViaikKYGBgCgpHcm91cCBieSByZWdpb24sIHdvcmQsIGZyZXF1ZW5jeSwgYW5kIGdyYW1tYXRpY2FsaXR5LiBTdW1tYXJpc2UgbWVhbiBhbmQgc3RhbmRhcmQgZXJyb3IuCmBgYHtyfQpkYXRhICU+JQogIGdyb3VwX2J5KHJlZ2lvbiwgd29yZCwgZnJlcSwgZ3JhbSkgJT4lCiAgc3VtbWFyaXNlKG1lYW5SVCA9IG1lYW4ocnQpLAogICAgICAgICAgICBzZVJUID0gc2QocnQpL3NxcnQobigpKSkgJT4lCiAgZ2dwbG90KGFlcyh4PXJlZ2lvbix5PW1lYW5SVCxjb2xvdXI9Z3JhbSkpICsKICAgIGdlb21fcG9pbnQoKSArCiAgICBnZW9tX3BhdGgoYWVzKGx0eT1mcmVxKSkgKwogICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1tZWFuUlQtc2VSVCwgeW1heD1tZWFuUlQrc2VSVCksd2lkdGg9LjEpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPWMoMTo1KSxsYWJlbHMgPSBjKCJ0aGUiLCJvbGQiLCJWRVJCIiwidGhlIiwiYm9hdCIpKSArCiAgeWxhYigicmVhZGluZyB0aW1lIChtaWxpc2Vjb25kcykiKQpgYGAKCiMjIyMgV2h5PyAKCldlbGwsIGNoZWNrIG91dCB0aGUgW0RhdGFzYXVydXMgRG96ZW5dKGh0dHBzOi8vd3d3LmF1dG9kZXNrcmVzZWFyY2guY29tL3B1YmxpY2F0aW9ucy9zYW1lc3RhdHMpLCB3aGljaCBhbGwgaGF2ZSB0aGUgc2FtZSB4L3kgbWVhbnMgYW5kIHN0YW5kYXJkIGRldmlhdGlvbnM6CiFbXSguLi9pbWFnZXMvZGF0YXNhdXJ1cy5naWYpCgojIyMgVHJ5IGl0IG91dAoKPiBEYXRhc2V0IGBpcmlzYDoKClRoZSBmdW5jdGlvbiBgZ2dwbG90YCBsYXllcnMgZGlmZmVyZW50IGdlb21ldHJpZXMgYW5kIGFlc3RoZXRpY3MgdG8gYnVpbGQgdXAgYSBwbG90OgpgYGB7cn0KaXJpcyAlPiUKICBtdXRhdGUoU2VwYWwuV2lkdGggPSBTZXBhbC5XaWR0aCtybm9ybShsZW5ndGgoU2VwYWwuV2lkdGgpLDAsLjEpKSU+JQogIGdncGxvdChhZXMoeD1TcGVjaWVzLHk9U2VwYWwuV2lkdGgsZmlsbD1TcGVjaWVzKSkgKwogIGdlb21fdmlvbGluKGx0eT0wLGFscGhhPS41KSsKICBnZW9tX2JveHBsb3QoYWxwaGE9MC41LGx3ZD0uNSkgKwogIGdlb21fcXVhc2lyYW5kb20oZG9kZ2Uud2lkdGg9MSwgYWxwaGE9LjUpCmBgYAoKSW4gd2hhdCB3YXlzIG1pZ2h0IHdlIGNoYW5nZSB0aGlzIHBsb3Q/CmBgYHtyfQppcmlzICU+JQogIG11dGF0ZSgKICAgIFNlcGFsLldpZHRoID0gU2VwYWwuV2lkdGggKyAKICAgICAgcm5vcm0oCiAgICAgICAgbGVuZ3RoKFNlcGFsLldpZHRoKSAsIDAgLCAuMQogICAgICAgICkKICAgICkgJT4lCiAgZ2dwbG90KGFlcyh4PVNwZWNpZXMseT1TZXBhbC5XaWR0aCkpICsKICBnZW9tX2JveHBsb3QoKSArCiAgZ2VvbV9xdWFzaXJhbmRvbShhZXMocGNoPVNwZWNpZXMpLCBhbHBoYT0uNSkKICAjZ2dwbG90KGFlcyh4PVNwZWNpZXMseT1TZXBhbC5XaWR0aCxmaWxsPVNwZWNpZXMpKSArCiAgI2dlb21fdmlvbGluKGx0eT0wLGFscGhhPS41KSsKICAjZ2VvbV9ib3hwbG90KGFscGhhPTAuNSxsd2Q9LjUpICsKICAjZ2VvbV9xdWFzaXJhbmRvbShkb2RnZS53aWR0aD0xLCBhbHBoYT0uNSkKYGBgCgoKR29pbmcgYmFjayB0byBgcXVha2VzYCwgbGV0J3MgcGlwZSBvdXIgdGFibGUgaW50byBhIGdncGxvdCAoYW5kIGZpbGwgaW4gbWlzc2luZyB2YWx1ZXMpOgpgYGB7cn0KcXVha2VzICU+JQogIGdyb3VwX2J5KG1hZykgJT4lCiAgc3VtbWFyaXNlKG49bigpLAogICAgICAgICAgICBzdGE9bWVhbihzdGF0aW9ucyksCiAgICAgICAgICAgIHN0YVNEPXNkKHN0YXRpb25zKSwKICAgICAgICAgICAgc3RhU0U9c3RhU0Qvc3FydChuKSwKICAgICAgICAgICAgZGVwPW1lYW4oZGVwdGgpLAogICAgICAgICAgICBkZXBTRD1zZChkZXB0aCksCiAgICAgICAgICAgIGRlcFNFPWRlcFNEL3NxcnQobikpICU+JQogIGdncGxvdChhZXMoeD1tYWcpKSArCiAgZ2VvbV9wb2ludChhZXMoeT1zdGEpLGNvbG91cj0icmVkIikrCiAgZ2VvbV9wYXRoKGFlcyh5PXN0YSksY29sb3VyPSJyZWQiKSsKICBnZW9tX3JpYmJvbihhZXMoeW1pbj1zdGEtc3RhU0QseW1heD1zdGErc3RhU0QpLGZpbGw9InJlZCIsYWxwaGE9LjIpICsKICBnZW9tX3JpYmJvbihhZXMoeW1pbj1zdGEtc3RhU0UseW1heD1zdGErc3RhU0UpLGZpbGw9InJlZCIsYWxwaGE9LjUpICsKICBnZW9tX3BvaW50KGFlcyh5PWRlcCksY29sb3VyPSJibHVlIikrCiAgZ2VvbV9wYXRoKGFlcyh5PWRlcCksY29sb3VyPSJibHVlIikrCiAgZ2VvbV9yaWJib24oYWVzKHltaW49ZGVwLWRlcFNELHltYXg9ZGVwK2RlcFNEKSxmaWxsPSJibHVlIixhbHBoYT0uMikgKwogIGdlb21fcmliYm9uKGFlcyh5bWluPWRlcC1kZXBTRSx5bWF4PWRlcCtkZXBTRSksZmlsbD0iYmx1ZSIsYWxwaGE9LjUpICsKICB0aGVtZV9idygpICsgeWxhYigiZGVwdGggT1IgbnVtYmVyIG9mIHN0YXRpb25zIHJlcG9ydGluZyIpCmBgYAoKSW5oZXJpdGFuY2U6CmBgYHtyfQpnZ3Bsb3QoZGF0YT1xdWFrZXMsIGFlcyh4PWxvbmcpKSArCiAgZ2VvbV9wb2ludChhZXMoeT1sYXQsY29sb3VyPXN0YXRpb25zKSkgIysKICAjZ2VvbV9wYXRoKCkKYGBgCg==